import org.junit.Test;

import java.util.Arrays;

/**
 * 数组 Array
 * 数组相当于一堆相同数据类型的数据:
 *
 */


public class 数组 {
    private char[] temp;

    //1.数组定义：4种，创建数组初始化【静态初始化：给定值 动态初始化;无给定值】
    @Test
    public  void testArray(){
        //注意:数组长度固定，不能改变
        int[]  arr1=new int[4];//Java推荐写法 动态初始化
        int arr2[]=new int[4];//C推荐写法Java兼容 动态初始化
        int[] arr3={1,2,3};//静态初始化数组，元素可以直接使用
        int[] arr4=new int[]{1,2,3};//动态初始化
        //数组：内部存数据叫做元素？
        //从arr3取出 2的元素        数组名 下标
        System.out.println(arr3[1]);
        //从arr3的长度
        System.out.println(arr3.length);
        //从arr4获取到 第四个元素值  数组下标越界异常：下标超出数组长度范围
        // System.out.println(arr4[4]);//报错 ArrayIndexOutOfBoundsExcepti
    }
    /**
     * 数组的迭代（遍历：输出数组所有元素值）三种
     * 1.普通迭代方式:for
     * 2.增强for方式：推荐，JDK1.5之后
     * 3.工具类：Arrays
     */
    @Test
    public void testIterate(){
        int[] arr={1,2,3,4};//静态初始化数组
        for(int i=0;i< arr.length;i++){//拿数组下标
            System.out.println(arr[i]);
        }
        //增强for jdk1.5
        for (int j:arr){//增强for语法：（遍历数据类型 引用：数组名）
            System.out.println(j);
        }
        //工具类：Arrays.toString()直接打印数组元素值
        System.out.println(Arrays.toString(arr));
    }
    /**
     * 数组扩容：数组长度是固定，不可改变【可以使用扩容改变数组长度】
     */
    @Test
    public void testCopy(){
        //字符数组
        char[] arr={'唐','山'};  //想法：长度增加为4
        //扩容:增加4个    克隆新的数组
        char[]temp=Arrays.copyOf(arr,4);
        arr=temp;
        System.out.println(arr);
        //需求：输出唐山工业


    }
    /**
     * 数组输出元素时，会有一些不同，【查看数据是否为数组】
     * 数据类型：基础数据类型+引用类型
     */
    @Test
    public void testArrays(){
        //字符数组
        char[] china={'中','国'};
        System.out.println(china);//输出：中国   字符串：字符数组
        //输出语句--JavaOOP面向对象：重载，字符数组自动拼接
        //数值数组
        int[] i={1,2};
        System.out.println(i);//输出：[I数据类型 @ 连接符 3d82c5f3地址值]
    }
}